package HashTable;

import java.util.*;


class BM92 {
    /**
     *
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public static int maxLength (int[] arr) {
        int len = arr.length;
        if(len<2){
            return len;
        }
        // write code here
        //滑动窗口，哈希
//        Arrays.sort(arr);
        HashMap<Integer,Integer> map = new HashMap<>();
        int max = 0;
        for(int i=0,j=0;j<len;j++){
            map.put(arr[j],map.getOrDefault(arr[j],0)+1); //添加右边界
            //如果当前 map不合法，则移动左边界直到合法
            if(!isValid(map)){
                while(!isValid(map)){
                    map.put(arr[i],map.get(arr[i])-1);
                    //一个数被删除完，则清除
                    if(map.get(arr[i])==0){
                        map.remove(arr[i]);
                    }
                    i++;
                }
            }
            max = Math.max(max,map.size()); //更新最大值

        }
        return max;


    }

    //     /判断是否不重复
    private static boolean isValid(HashMap<Integer,Integer> map){
        for(Map.Entry<Integer,Integer> entry:map.entrySet()){
            if(entry.getValue()>1){
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{1,2,3,1,2,3,2,2};
        System.out.println(BM92.maxLength(nums));
    }
}
